<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * Класс для работы с captcha
 * 
 * @package CoreFramework
 * @version 1.0
 * @author Gennadiy Kozlenko
 */
class Captcha {
   
   /**
    * Instance
    *
    * @access private
    * @var object
    */
   var $_obj = null;
   
   /**
    * Название captcha в сессии
    *
    * @access private
    * @var string
    */
   var $_captcha_name = 'captcha';
   
   /**
    * Ширина captcha
    *
    * @access private
    * @var integer
    */
   var $_width = 65;
   
   /**
    * Высота captcha
    *
    * @access private
    * @var integer
    */
   var $_height = 21;
   
   /**
    * Количество символов
    *
    * @access private
    * @var integer
    */
   var $_length = 6;
   
   /**
    * Конструктор класса
    *
    * @access public
    * @return Captcha
    */
   function Captcha() {
      $this->_obj =& get_instance();
   } // end Captcha
   
   /**
    * Установка ширины
    *
    * @access public
    * @param integer $width
    */
   function set_width($width) {
      $this->_width = $width;
   } // end set_width
   
   /**
    * Получение ширины
    *
    * @access publuc
    * @return integer
    */
   function get_width() {
      return $this->_width;
   } // end get_width
   
   /**
    * Установка высоты
    *
    * @access public
    * @param integer $height
    */
   function set_height($height) {
      $this->_height = $height;
   } // end set_height
   
   /**
    * Получение высоты
    *
    * @access public
    * @return integer
    */
   function get_height() {
      return $this->_height;
   } // end get_height
   
   /**
    * Установка количества символов
    *
    * @access public
    * @param integer $length
    */
   function set_length($length) {
      $this->_length = $length;
   } // end set_length
   
   /**
    * Получение количества символов
    *
    * @access public
    * @return integer
    */
   function get_length() {
      return $this->_length;
   } // end get_length
   
   /**
    * Вывод captcha в браузер
    *
    * @access public
    */
   function display() {
      require_once BASEPATH . '../kcaptcha/kcaptcha.php';
      $captcha = new KCAPTCHA();
      $this->_obj->session->set($this->_captcha_name, $captcha->getKeyString());
      /*
      // Посылаем заголовок что это картинка
      $this->_obj->output->set_header('Content-type: image/png');
      
      // Генерируем текст для каптчи и кладем его в сессию
      $this->_obj->load->helper('string');
      $value = random_string('numeric', $this->_length);
      $this->_obj->session->set($this->_captcha_name, $value);
      
      // Рисуем картинку
      $im = imagecreate($this->_width, $this->_height);
      $background = imagecolorallocate($im, 255, 255, 255);
      $border = imagecolorallocate($im, 170, 170, 170);
      $text = imagecolorallocate($im, 50, 50, 50);
      $grid = imagecolorallocate($im, 127, 127, 127);
      
      // Рамка
      imagefilledrectangle($im, 0, 0, $this->_width, $this->_height, $background);
      imagerectangle($im, 0, 0, $this->_width - 1, $this->_height - 1, $border);
      imagefill($im, 2, 2, $background);
      
      // Генерируем всякие случайности
      $theta = 1;
      $thetac = 7;
      $radius = 16;
      $circles = 20;
      $points = 32;
      
      $x_axis  = rand(6, (360 / $this->_length) - 16);        
      $y_axis = rand(6, $this->_height);

      for ($i = 0; $i < ($circles * $points) - 1; $i++) {
         $theta = $theta + $thetac;
         $rad = $radius * ($i / $points );
         $x = ($rad * cos($theta)) + $x_axis;
         $y = ($rad * sin($theta)) + $y_axis;
         $theta = $theta + $thetac;
         $rad1 = $radius * (($i + 1) / $points);
         $x1 = ($rad1 * cos($theta)) + $x_axis;
         $y1 = ($rad1 * sin($theta )) + $y_axis;
         imageline($im, $x, $y, $x1, $y1, $grid);
         $theta = $theta - $thetac;
      }

      // Пишем текст
      for ($i = 0; $i <= strlen($value); $i++) {
         $sign = rand(1, 4);
         if ($sign == 1 || $sign == 3) {
            $x = 3 + rand(1, 3);
         } else {
            $x = 3 - rand(1, 3);
         }
         $y = 3 + $i * 10;
         imagestring($im, 5, $y, $x, substr($value, $i, 1), $text);
      }
      // Посылаем картинку в браузер
      imagepng($im);
      */
   } // end display
   
   /**
    * Получение значения captcha в сессии
    *
    * @access public
    * @return mixed
    */
   function get_captcha() {
      return $this->_obj->session->get($this->_captcha_name);
   } // end get_captcha
   
   /**
    * Проверка captcha на валидность
    *
    * @access public
    * @param string $value
    * @return boolean
    */
   function valid_captcha($value) {
      if (strtolower($value) == strtolower($this->get_captcha())) {
         $this->_obj->session->clean($this->_captcha_name);
         return true;
      }
      return false;
   } // end valid_captcha
   
}
